 //控制层 
app.controller('goodsController' ,function($scope,$controller,$location,typeTemplateService,brandService,itemCatService,goodsService){
	
	$controller('baseController',{$scope:$scope});//继承
	//声明商品的状态数组
	$scope.status=["未审核","审核通过","审核未通过","己关闭"];
	//声明分类列表数组
	$scope.itemCatList = [];

	//查询所有商品分类（key：商品分类id，value：分类名称）
	$scope.findItemCatList=function(){
		itemCatService.findAll().success(function (response) {
			for (var i = 0;i<response.length;i++){
				$scope.itemCatList[response[i].id]=response[i].name;
			}
		})
	}
    //读取列表数据绑定到表单中  
	$scope.findAll=function(){
		goodsService.findAll().success(
			function(response){
				$scope.list=response;
			}			
		);
	}    
	
	//分页
	$scope.findPage=function(page,rows){			
		goodsService.findPage(page,rows).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}
	
	//查询实体 
	$scope.findOne=function(){
		var id = $location.search()['id'];
		goodsService.findOne(id).success(
			function(response){
				$scope.entity= response;
				//1.转换图片列表json串为json对象
				$scope.entity.goodsDesc.itemImages=JSON.parse($scope.entity.goodsDesc.itemImages);
				//2.转换扩展属性
				$scope.entity.goodsDesc.customAttributeItems=JSON.parse($scope.entity.goodsDesc.customAttributeItems);
				//3.转换规格列表
				$scope.entity.goodsDesc.specificationItems=JSON.parse($scope.entity.goodsDesc.specificationItems);
				//4.转换sku商品列表中的spec这个json串为json对象
				var items = $scope.entity.items;
				for (var i = 0;i<items.length;i++){
					items[i].spec=JSON.parse(items[i].spec);
				}
				//5.对富文本编辑器赋值
				editor.html($scope.entity.goodsDesc.introduction);
			}
		);
	}
	//根据当前查询出某个商品关联的sku列表，自动选中规格选项
	$scope.selectAttribute=function(specName,optionName){
		var specificationItems = $scope.entity.goodsDesc.specificationItems;
		//1.根据指定的key（attributeName）及attributeName对应的值判断是否在specificationItems存在此对象
		var object = searchObjectByKey(specificationItems,"attributeName",specName);
		//2.判断
		if (object == null){
			return false;
		} else {
			return object.attributeValue.indexOf(optionName) >= 0;
		}
	}
	//保存 
	$scope.save=function(){				
		var serviceObject;//服务层对象
		//将富文本编辑器中内容取出赋值给 goodsDesc中的introduction 这个字段
		$scope.entity.goodsDesc.introduction=editor.html();
		if($scope.entity.goods.id!=null){//如果有ID
			serviceObject=goodsService.update( $scope.entity ); //修改
		}else{
			serviceObject=goodsService.add( $scope.entity  );//增加
		}				
		serviceObject.success(
			function(response){
				if(response.success){
					//清空数据
					$scope.entity = {};
					editor.html("");    //清空kindEditor编辑器

				}else{
					alert(response.message);
				}
			}		
		);				
	}
	
	 
	//批量删除 
	$scope.dele=function(){			
		//获取选中的复选框			
		goodsService.dele( $scope.selectIds ).success(
			function(response){
				if(response.success){
					$scope.reloadList();//刷新列表
					$scope.selectIds=[];
				}						
			}		
		);				
	}
	
	$scope.searchEntity={};//定义搜索对象 
	
	//搜索
	$scope.search=function(page,rows){			
		goodsService.search(page,rows,$scope.searchEntity).success(
			function(response){
				$scope.list=response.rows;	
				$scope.paginationConf.totalItems=response.total;//更新总记录数
			}			
		);
	}

	//初始化entity对象
	$scope.entity={goods:{},goodsDesc:{itemImages:[],specificationItems:[]}};
	//进行文件上传
	 $scope.upload=function () {
		 goodsService.upload().success(function (response) {
			 if (response.success){
			 	$scope.entityImage.url =response.message;
			 } else{
			 	alert(response.message);
			 }
		 })
	 }
	 //将每次上传的图片保存到$scope.entity.goodsDesc.itemImages数组中
	$scope.saveToItemImages=function () {
		$scope.entity.goodsDesc.itemImages.push($scope.entityImage);
	}
	//删除所上传的图片列表中的某个图片
	$scope.delePic=function (index) {
		$scope.entity.goodsDesc.itemImages.splice(index, 1);
	}
	//查询一级分类列表
	$scope.findCategory1List=function () {
		itemCatService.findByParentId(0).success(function (response) {
			$scope.category1List = response;
		})
	}
	//利用$scope.watch()方法对指定的字段的数据进行监控
	//1.监控一级分类(参数1，代表需要监控的字段，参数2：监控值发生改变时的回调函数（参数1：新值 参数2：旧值）)
	$scope.$watch("entity.goods.category1Id",function (newValue,oldValue) {
		itemCatService.findByParentId(newValue).success(function (response) {
			$scope.category2List = response;
		})
	})
	//2.监控二级分类
	$scope.$watch("entity.goods.category2Id",function (newValue,oldValue) {
		itemCatService.findByParentId(newValue).success(function (response) {
			$scope.category3List = response;
		})
	})
	//3.监控三级分类
	$scope.$watch("entity.goods.category3Id",function (newValue,oldValue) {
		//3.1）三级分类发生改变时，模板id也同时发生改变
		itemCatService.findOne(newValue).success(function (response) {
			$scope.entity.goods.typeTemplateId = response.typeId;
		})
	})
	//4.监控模板id值的变化
	$scope.$watch("entity.goods.typeTemplateId",function (newValue,oldValue) {
		//第一：模板id发生变化，查询出模板对象
		typeTemplateService.findOne(newValue).success(function (response) {
			//4.1)转换模板中的品牌列表
			$scope.brandList = JSON.parse(response.brandIds);
			//4.2)转换模板中的扩展属性列表
			if (!$location.search()['id']){
				$scope.entity.goodsDesc.customAttributeItems=JSON.parse(response.customAttributeItems);
			}

		})
		//第二：模板值发生变化时，规格选项列表也发生变化
		typeTemplateService.findSpecListByTypeId(newValue).success(function (response) {
			$scope.specList = response;
		})
	})
	//定义根据key在数组中查询元素的方法
	searchObjectByKey=function(list,key,value){
	 	for (var i=0;i<list.length;i++){
	 		if (list[i][key] == value){
	 			return list[i];
			}
		}
	 	return null;
	}
	//点击了规格选项中的某一项后触发的方法（向entity.goodsDesc.specificationItems数组中动态添加或移除数据）
	$scope.updateSelectSpec=function (event,name,value) {
		//1.根据key名为"attributeName"查找在entity.goodsDesc.specificationItems是否有指定对象
		var object = searchObjectByKey($scope.entity.goodsDesc.specificationItems,"attributeName",name);
		//2.判断对象是否存在
		if (object){		//对象存在，就向$scope.entity.goodsDesc.specificationItems.attributeValue中添加或移除元素
			//2.1)判断是否复选
			if (event.target.checked){ //①如果复选，就向$scope.entity.goodsDesc.specificationItems.attributeValue添加复选项
				object.attributeValue.push(value);
			} else{			//②未被复选，就从$scope.entity.goodsDesc.specificationItems.attributeValue移除一项
				var index = object.attributeValue.indexOf(value);
				object.attributeValue.splice(index, 1);
				//③ 如果移除后$scope.entity.goodsDesc.specificationItems.attributeValue的长度为0（没有值）就从
				//$scope.entity.goodsDesc.specificationItems移除此object对象
				if (object.attributeValue.length == 0){
					var index = $scope.entity.goodsDesc.specificationItems.indexOf(object);
					$scope.entity.goodsDesc.specificationItems.splice(index, 1);
				}
			}
		} else{				//如果对象不存在，就向规格列表中添加对象
			$scope.entity.goodsDesc.specificationItems.push({"attributeName":name, "attributeValue":[value]});
		}
		$scope.createSkuList();
	}
	//生成sku商品列表
	$scope.createSkuList=function () {
	 	//1.定义默认sku商品列表
		$scope.entity.items=[{spec:{},status:'0',isDefault:'0',price:100,num:9999}];
		//2.得到规格选项列表
		var specificationItems = $scope.entity.goodsDesc.specificationItems;
		//3.遍历规格选项列表
		for (var i=0;i< specificationItems.length;i++){
			var specItem = specificationItems[i];
			//每次循环就修改规格选项的值
			$scope.entity.items = addColumn($scope.entity.items,specItem.attributeName,specItem.attributeValue);
		}
	}
	addColumn=function (specificationItems,attributeName,attributeValue) {
	 	//1.重新定义新的数组，将新克隆得到的数组放到此数组中
		var specList = [];
		//2.重新遍历数组
		 for (var i =0;i<specificationItems.length;i++){
		 	//2.1)得到原始行
			 var oldRow = specificationItems[i];
			 //2.2)遍历规格选项值数组
			 for (var j=0;j< attributeValue.length;j++){
				 //2.3)对原来的数据进行深克隆得到一新行
				 var newRow = JSON.parse(JSON.stringify(oldRow));
				 //2.4)对newRow重新赋值
				 newRow.spec[attributeName]=attributeValue[j];
				 //2.5)再将newRow放到specList数组中
				 specList.push(newRow);
			 }
		 }
		 //3.返回新数组
		return specList;
	}
});	
